"""
此示例演示如何使用流式接口启动聊天请求
并处理聊天事件
"""

import os
import sys
# 我们的官方 coze Python SDK [cozepy](https://github.com/coze-dev/coze-py)
from cozepy import COZE_CN_BASE_URL

# 添加项目根目录到Python路径，以便导入config_reader模块
current_dir = os.path.dirname(os.path.abspath(__file__))
project_root = os.path.dirname(os.path.dirname(current_dir))
sys.path.append(project_root)

from config_reader import get_coze_config

# 从配置文件获取Coze配置
coze_config = get_coze_config()
coze_api_token = coze_config['token']

if not coze_api_token:
    raise ValueError("请在 config.ini 文件中设置 COZE_API_TOKEN")


# 默认访问地址是 api.coze.com，但如果您需要访问 api.coze.cn，
# 请使用 base_url 配置 API 端点进行访问
coze_api_base = COZE_CN_BASE_URL

from cozepy import Coze, TokenAuth, Message, ChatStatus, MessageContentType, ChatEventType  # noqa

# 通过访问令牌初始化 Coze 客户端
coze = Coze(auth=TokenAuth(token=coze_api_token), base_url=coze_api_base)

# 在 Coze 中创建一个机器人实例，从网页链接复制最后一个数字作为机器人的 ID

# 从环境变量获取工作流ID
bot_id = os.getenv('COZE_BOT_ID', '7528243852231229492')

# 用户 ID 标识用户的身份。开发者可以使用自定义的业务 ID
# 或随机字符串
user_id = '123456789'

# 调用 coze.chat.stream 方法创建聊天。create 方法是一个流式
# 聊天，将返回一个聊天迭代器。开发者应该迭代该迭代器来获取
# 聊天事件并处理它们
for event in coze.chat.stream(
    bot_id=bot_id,
    user_id=user_id,
    additional_messages=[
        Message.build_user_question_text("Tell a 500-word story."),
    ],
):
    if event.event == ChatEventType.CONVERSATION_MESSAGE_DELTA:
        print(event.message.content, end="", flush=True)

    if event.event == ChatEventType.CONVERSATION_CHAT_COMPLETED:
        print()
        print("token usage:", event.chat.usage.token_count)